package ip;

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Enumeration;

/**
 * 用来获取当前电脑的ip与mac地址
 * @author hai
 *
 */
public class IpUtil {
	 private IpUtil(){}  
	    /** 
	     * 此方法描述的是：获得服务器的IP地址 
	     */  
	    public static String getLocalIP() {  
	        String sIP = "";  
	        InetAddress ip = null;  
	        try {  
	            boolean bFindIP = false;  
	            Enumeration<NetworkInterface> netInterfaces = (Enumeration<NetworkInterface>) NetworkInterface  
	                    .getNetworkInterfaces();  
	            while (netInterfaces.hasMoreElements()) {  
	                if (bFindIP) {  
	                    break;  
	                }  
	                NetworkInterface ni = (NetworkInterface) netInterfaces  
	                        .nextElement();  
	                  
	                Enumeration<InetAddress> ips = ni.getInetAddresses();  
	                while (ips.hasMoreElements()) {  
	                    ip = (InetAddress) ips.nextElement();  
	                    if (!ip.isLoopbackAddress()   
	                            && ip.getHostAddress().matches(  
	                                    "(\\d{1,3}\\.){3}\\d{1,3}")) {  
	                        bFindIP = true;  
	                        break;  
	                    }  
	                }  
	            }  
	        } catch (Exception e) {  
	            e.printStackTrace();  
	        }  
	        if (null != ip) {  
	            sIP = ip.getHostAddress();  
	        }  
	        return sIP;  
	    }  
	      
	    /** 
	     * 此方法描述的是：获得服务器的MAC地址 
	     */  
	    public static String getMacId() {  
	        String macId = "";  
	        InetAddress ip = null;  
	        NetworkInterface ni = null;  
	        try {  
	            boolean bFindIP = false;  
	            Enumeration<NetworkInterface> netInterfaces = (Enumeration<NetworkInterface>) NetworkInterface  
	                    .getNetworkInterfaces();  
	            while (netInterfaces.hasMoreElements()) {  
	                if (bFindIP) {  
	                    break;  
	                }  
	                ni = (NetworkInterface) netInterfaces  
	                        .nextElement();  
	                // ----------特定情况，可以考虑用ni.getName判断  
	                // 遍历所有ip  
	                Enumeration<InetAddress> ips = ni.getInetAddresses();  
	                while (ips.hasMoreElements()) {  
	                    ip = (InetAddress) ips.nextElement();  
	                    if (!ip.isLoopbackAddress() // 非127.0.0.1  
	                            && ip.getHostAddress().matches(  
	                                    "(\\d{1,3}\\.){3}\\d{1,3}")) {  
	                        bFindIP = true;  
	                        break;  
	                    }  
	                }  
	            }  
	        } catch (Exception e) {  
	            e.printStackTrace();  
	        }  
	        if (null != ip) {  
	            try {  
	                macId = getMacFromBytes(ni.getHardwareAddress());  
	            } catch (SocketException e) {  
	                e.printStackTrace();  
	            }  
	        }  
	        return macId;  
	    }  
	      
	    private static String getMacFromBytes(byte[] bytes) {  
	        StringBuffer mac = new StringBuffer();  
	        byte currentByte;  
	        boolean first = false;  
	        for (byte b : bytes) {  
	            if (first) {  
	                mac.append("-");  
	            }  
	            currentByte = (byte) ((b & 240) >> 4);  
	            mac.append(Integer.toHexString(currentByte));  
	            currentByte = (byte) (b & 15);  
	            mac.append(Integer.toHexString(currentByte));  
	            first = true;  
	        }  
	        return mac.toString().toUpperCase();  
	    }  
	      
	      
	    public static void main(String[] args) throws SocketException, UnknownHostException {  
	        System.out.println(getLocalIP());  
	        System.out.println(getMacId());  
	    }  
}
